package es.uca.plii.warrenl0;

/**
 * Expresion es un Singleton, accesible en toda la aplicación a través de 
 * la factoría getInstance() <br/>
 * <br/>
 * El parser almacena en la instancia de Expresion los arboles sintácticos de
 * los nodos programa y query, que quedan disponibles para que el programa
 * principal instancie los objetos del tipo Query y Programa con ellos.
 *
 * @author Rafael Sánchez, Alfonso Sendra
 */
public class Expresion {

    /**
     * Instancia de la clase
     */
    private static Expresion instance = new Expresion();

    /**
     * Raíz del árbol sintáctico de "programa"
     */
    private Nodo programa;

    /**
     * Raíz del árbol sintáctico de "Query"
     */
    private Nodo query;

    /**
     * Devuelve el nodo raíz del árbol sintáctico de "programa"
     * @return el nodo raiz
     */
    public Nodo getPrograma() {
        return programa;
    }

    /**
     * Establece el nodo raíz del árbol sintáctico de "programa"
     * @param programa el nodo raiz
     */
    public void setPrograma(Nodo programa) {
        this.programa = programa;
    }

    /**
     * Devuelve el nodo raíz del árbol sintáctico de "query"
     * @return el nodo raiz
     */
    public Nodo getQuery() {
        return query;
    }

    /**
     * Establece el nodo raíz del árbol sintáctico de "query"
     * @param query el nodo raiz
     */
    public void setQuery(Nodo query) {
        this.query = query;
    }
    

    private Expresion() {}


    /**
     * Factoría para la construcción de la clase
     * @return la clase
     */
    public static Expresion getInstance() {

        if (instance == null) {
            instance = new Expresion();
        }

        return instance;


    }
}
